package tech.aistar.day09;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 本类用来演示: ArrayList
 *
 * @author: success
 * @date: 2022/7/28 8:50 上午
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        //jdk5.0之前 - 还没有泛型的概念
        List list01 = new ArrayList();
        //可以添加任意类型的元素
        list01.add(null);
        list01.add(10);
        list01.add("good");
        list01.add("good");

        System.out.println(list01);//重写toString

        //jdk5.0开始引入了泛型的概念 - 类型安全的集合框架
        //泛型一定是对象类型,不能使用基本数据类型
        //泛型仅仅在编译期间是奏效的,但是在运行期将会被擦除
        List<Integer> lists = new ArrayList<Integer>();
        lists.add(null);
        lists.add(1);
        lists.add(2);
        lists.add(3);

        //java.lang.Object Class<?> getClass();//获取对象的运行时期类型
        System.out.println(lists.getClass());//class java.util.ArrayList

        //3. 轮到jdk7.0开始
        List<String> list02 = new ArrayList<>();
        list02.add("java");
        list02.add("python");
        list02.add("c");
        list02.add("c");

        //常用方法
        //获取集合的大小
        System.out.println(list02.size());//4

        //根据下标,获取集合的元素,从0开始
        System.out.println(list02.get(0));//java.lang.IndexOutOfBoundsException

        //判断集合中是否包含某个元素
        list02.contains("c");//true

        //删除 - 重载的方法
        //list02.remove("c");//删除集合中第一次出现的

        //根据下标进行删除
        list02.remove(1);

        //list02.clear();//清空元素

        //System.out.println(list02.isEmpty());//如果集合中的个数是0,返回true

        //1. 集合的遍历方式 - 直接输出
        //2. 普通for循环进行遍历
        for (int i = 0; i < list02.size(); i++) {
            System.out.println(list02.get(i));
        }
        //3. 增强for循环进行遍历
        for (String s : list02) {
            System.out.println(s);
        }

        //4. 集合的迭代器
        Iterator<String> iter = list02.iterator();
        while(iter.hasNext()){//判断是否有下一个元素,返回true=>存在
            //获取元素
            String e = iter.next();
            System.out.println(e+"-");
        }

        //5. jdk8.0语法
        list02.forEach(e-> System.out.println(e));

        list02.forEach(System.out::println);

        list02.stream().forEach(e-> System.out.println(e+"="));
    }
}
